【C】位运算求集合的幂集

所谓幂集(Power Set), 就是原集合中所有的子集(包括全集和空集)构成的集族。

例如集合S = {a,b,c};那么S的幂集P(S) = { Ø ,{a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c} }。

N个元素的集合的幂集共有2^N个集合构成的元素。

下面是利用C语言实现的求幂集的代码。最大支持元素N <= 31。

 1 #include <stdio.h>
 2 
 3 void Powerset( int a[],int n )/*a[]为所求集合,n为元素的个数*/
 4 {
 5     unsigned int code = 0;
 6     int i;
 7 
 8     for( code = 0; code < (1<<n) ; code++ )
 9     {
10         printf("{ ");
11         for(i=0;i<(1<<n);i++)
12         {
13             if( code&(1<<i) )/*输出code第i位为1的对应元素a[i]*/
14             {
15                 printf("%d ",a[i]);
16             }
17         }
18         printf("}");
19         printf("\n");
20     }
21 }
22 
23 int main()
24 {
25     int a[4] = {1,2,3,4};
26     Powerset(a,4);
27     return 0;
28 }

 

posted @ 2015-03-03 13:13  永久指针  阅读(1547)  评论(0编辑  收藏  举报